Steem SSE Boiler build
-----------------------

The Boiler build is also called the "debug build", but it's meant to peer into
Atari ST programs, not Steem itself as PC program. 
It's not a "debug build" like you have for example in Visual C++. 
As far as the compiler is concerned, it is a "release build".
It is available only in Windows.
It makes very good use of all Windows GUI possibilities. This is the work of
Steem authors, the SSE version merely adds on it.
There never was much documentation for the Boiler. People using it are supposed
to be familiar with debuggers and with the ST.
This file will just present new features in the SSE version of Steem, added to
help in the development of the "player" build of Steem.

Copy code in clipboard
-----------------------

In an instruction or memory browser, if you right click on the 'Dump->' button,
500 bytes of ST RAM are copied or disassembled into the clipboard. Then you can
paste wherever you want. This feature uses some code found on the internet.

Log
----

The log has been neglected in the SSE version. For example, border effects are
not logged. It is recommended to suspend logging (I wonder what machine the
Steem authors had!), or to carefully select your options.

TRACE
------

However an alternative 'Trace' system is used in the SSE version.
You can command the output by selecting log options.
This parallel system was developed because I'm more familiar with it and
I wanted it to work in the 'non-boiler', debug build of Visual C++, in
the IDE output window or a file at choice.
Each time you quit the boiler, the traces are available in the file
'TRACE.txt'.
It is already well developed for: crash, FDC, IKBD, IO and init somewhat.
'Suspend logging' won't suspend the traces. This is commanded by option
'Output TRACE to file'.

OSD Info
---------

I found it useful for my own needs, when some events happen a short string
is displayed on the top left part of the screen, for example:

Trace       CPU is in trace mode (indicating some code protection)
Write SDP   STE-only video counter write used

etc.
This is commanded by the Boiler/SSE option 'Control mask browser'.

Assert
-------

A message box will appear when an "assert" fails during execution, with
the usual options. 'Abort' can spare you a crash, 'Ignore' will ignore all
subsequent asserts (they will still be written in the trace file).

Shifter tricks
---------------

Log section Video.
For each VBL, the eventual "shifter tricks" are summarised and traced. The mask,
inspired by Hatari, currently is (changed in v3.5.3):

#define TRICK_LINE_PLUS_26 0x001
#define TRICK_LINE_PLUS_2 0x02
#define TRICK_LINE_MINUS_106 0x04
#define TRICK_LINE_MINUS_2 0x08
#define TRICK_LINE_PLUS_44 0x10
#define TRICK_4BIT_SCROLL 0x20
#define TRICK_OVERSCAN_MED_RES 0x40
#define TRICK_BLACK_LINE 0x80	
#define TRICK_TOP_OVERSCAN 0x100
#define TRICK_BOTTOM_OVERSCAN 0x200
#define TRICK_BOTTOM_OVERSCAN_60HZ 0x400
#define TRICK_LINE_PLUS_20 0x800	
#define TRICK_0BYTE_LINE 0x1000	
#define TRICK_STABILISER 0x2000
#define TRICK_WRITE_SDP 0x4000
#define TRICK_WRITE_SDP_POST_DE 0x8000
#define TRICK_UNSTABLE 0x10000
#define TRICK_LINE_PLUS_24 0x20000
#define TRICK_NEO 0x40000//tests

It is defined in SSEShifter.h.

Plus & minus mean bytes more or less fetched in the video RAM.
Eg 'left off' = 'line +26'

Each time you stop emulation, a file 'frame_report.txt' is issued, giving a
report of events and their timing for the last frame, scanline by scanline
(palette, sync, shift mode, blitter...) with their timing. 
This helped me a lot. 
It's always the same file used. You don't need to quit the boiler. 
What info is displayed is commanded in the Boiler/SSE option 'Control mask
 browser'.


Changes in v3.5
----------------------

- removed DIV & Pasti log options (use FDC instead of Pasti),
replaced with some new options
- some log options also work for TRACE.txt
The best developed are Crash, FDC, IKBD
New ones have been added:
Floppy data dumps all DMA transfers
Image info
IPF sector info
This needs to be reorganised
- 6301 trace now common with Steem (TRACE.txt)
- PSG filter option didn't work in Boiler
- improved message box (abort retry ignore)
- fixed autosave shifter tricks

v3.5.3
-------

- debug info as OSD - not optional, it's #define SS_OSD_DEBUG_MESSAGE,
and is commanded by TRACE_OSD(...) (printf format)
- removed shortcut for 'save shifter tricks report' as this is done on
each stop.
- OSD disk track info gives command in slow mode

v3.5.4
-------
- marginal improvements


v3.6.0
------

For v3.6 there are more improvements simply because I needed a more
powerful debugger to check some interesting bug reports.

- New menu title SSE

- SSE options are persistent

- "shifter_tricks": better res, sync values at start of frame

- "shifter_tricks": report video counter at start of every scanline 
with "fetching"

- better traces for hard disk (copied from Steem's own log)

- Keep CPU TRACE on if log is suspended (plus #define for
  not stopping the log anyway)

- OSD mentions 60hz frames

- Line, pixel and video counter on right click (yeah!)

- Wipe TRACE.txt too on option "Wipe Logfile"

- More useful reporting of Timer B

- Reverse video enabled timers (yeah!)

- remove useless 'a' and 'd' parameters (PSG sound filter)

- big register letters (question of taste)

- "other SP" renamed A7#2 and moved

- SR's hex value also given (before, only bits)

- Mouse wheel scrolling (yeah!)
Long requested I think, the mouse wheel will now scroll the memory and
instruction browsers. Shift or left button command 'scroll page'.
As an unexpected bonus, it also works in the main Boiler.

- Display current interrupt (yeah!)

    It tries to figure out which interrupt if any is being
    executed when the Boiler is stopped.
    MAIN means the CPU isn't executing an interrupt 
    OVF means 'Overflow', interrupts keep coming without corresponding
    RTE. This happens with a lot of programs that directly manipulate the 
    stack. Even the TOS does it on bus error.
    That's why Steem's original interrupt_depth variables quickly goes
    all the way.
    For this reason, a click on the control will reset it if in
    overflow. If not, it will show previous interrupt. So much power!
    We try to guess interrupt when "overflow", there's a '?' after the
    name of the interrupt in that case.

- New options to mute PSG channels

- Display shifter draw pointer, shift mode and sync in timings page

- New option 'Run to RTS'

- Shortcut for blazing Step Over ("fast forward")

- OSD show gemdos command if log option 'Hard Disk' (new name for Stemdos) 
  checked

- New option 'Monitor: specific value'.
    When the option is checked, when you set a watch Steem will look
    at the 'find' box and interpret the string there as a condition.
    You must set the condition first.
    Only the last consition you typed in any memory browser counts:
    internally, there's only room for one by design.
    One comparison character (=,!,<,>) is required.
    Value must be a WORD in hexadecimal, without $
    You may for example type >0FFF, then click in the monitor column to
    add the watch.

- New option 'Monitor: address range'
When this is checked, the first two watches will be considered as 
the limits of a range to check.

- New option '68030 stack frame'. It's interesting to check if
programs are compatible with Falcon or TT computers. From Petari.

- New option 'Dump 6301 RAM' (for ROM it's a #define)

- Compute checksum of floppy disk boot sector (log Image info)

- OSD trace for HBI

- A series of new memory browsers, for ACIA, Blitter, shifter, Vectors
  They're generally just pointers to the appropriate IO zone.
  Except the 6301 true emu browser, that points to the internal RAM
  of the 6301 chip.


v3.6.1
------

-Fixes in 'monitor for value', should work better for .L writes now
-Instruction browsers called "Instructions", not "Memory"
-shifter_tricks now called FrameReport because it may be more than
just the Shifter
-internal changes, making "Shifter events" "frame events", same reason
-Boiler fake IO: taking advantage of the impressive Boiler GUI to
control some internal control masks as if they were part of the IO map.
This will maximize control while minimising code.
Option SSE/Control mask browser
This will control:
Frame Report (former shifter events)
OSD
Some TRACE (log section may still apply)
-transfer mute sound options to fake io
-transfer some log options to fake io
-User can choose a scanline to report events each frame,
Type value on left of 'Go' button and click button once.
OSD will also show shifter tricks for that line.
-Timers: show when timer B is used as line counter or not
-Display double register A7 as USP and SSP
-Display "other" A7 stack
 Handy feature, in the SSE menu you may decide which version
 of A7=SP, USP or SSP will be displayed. As usual USP or SSP depends
 on supervisor bit.
-Improved floppy traces

v3.6.2
------
-

v3.6.3
------
-Boiler bugfix 'Control mask browser' keeps its name at reload

v3.6.4
------
-Minor changes

v3.7.0
------
- More options in control mask browser
- eg Mute sound: PSG noise, envelope; DMA
- Some debugging of IO R/W detection
- Fix crash if drag icon on boiler icon
- CPU Trace refactoring: "step" and "breakpoint" will work on the instruction
  being traced
- TRACE.txt: date and time of each runtime
-Far user-friendlier IO trace, you must also select chips you want
to trace (MMU, MFP, Floppy, Shifter...) -> no more bloated TRACE
-Better CPU trace (with registers and stack if you want)
-Pseudo-stack based on interception of push/pop, recording only PC; no L/S
-Names of internal ST/TOS variables in low memory
-Show 'vectors' in the 'reg' column of memory browsers/boiler
eg: the address where the VBI routine starts, TB for timer B, ...
-Option to skip TOS exceptions (at last)

